////
//// Source code recreated from a .class file by IntelliJ IDEA
//// (powered by Fernflower decompiler)
////
//
//package com.example.testhiber.initPackage.config.service;
//
//import java.io.Serializable;
//import java.lang.reflect.Field;
//import java.lang.reflect.Method;
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.HashMap;
//import java.util.HashSet;
//import java.util.Iterator;
//import java.util.List;
//import java.util.Map;
//import java.util.Set;
//
//import com.example.testhiber.initPackage.business.utils.StringKit;
//import com.example.testhiber.initPackage.config.model.dao.Dao;
//import com.example.testhiber.initPackage.config.model.entity.BaseEntity;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.dao.support.DaoSupport;
//import org.springframework.data.domain.Page;
//import org.springframework.data.jpa.domain.Specification;
//import org.springframework.util.Assert;
//import simple.system.simpleweb.platform.annotation.convert.ConvertBean;
//import simple.system.simpleweb.platform.annotation.convert.ConvertConfig;
//import simple.system.simpleweb.platform.convert.ConvertDto;
//import simple.system.simpleweb.platform.dao.Dao;
//import simple.system.simpleweb.platform.dao.DaoSupport;
//import simple.system.simpleweb.platform.dao.jpa.DefaultJpaQuery;
//import simple.system.simpleweb.platform.model.BaseEntity;
//import simple.system.simpleweb.platform.support.ConvertHandler;
//import simple.system.simpleweb.platform.support.Dto;
//import simple.system.simpleweb.platform.util.BeanKit;
//import simple.system.simpleweb.platform.util.ClassKit;
//import simple.system.simpleweb.platform.util.CollectionKit;
//import simple.system.simpleweb.platform.util.ObjectKit;
//import simple.system.simpleweb.platform.util.SpringElKit;
//import simple.system.simpleweb.platform.util.StringKit;
//
//public class AbstractService<D extends Dao<K, M>, M extends BaseEntity<K>, K extends Serializable> implements DaoSupport<D, M, K> {
//    protected D dao;
//    private static final String[] DEFAULT_IGNORE_FIELDS = new String[]{"createTime", "updateTime", "deleted"};
//    private Set<String> ignoreSet = new HashSet();
//    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractService.class);
//
//    public AbstractService(D dao) {
//        CollectionKit.mergeArrayIntoCollection(DEFAULT_IGNORE_FIELDS, this.ignoreSet);
//        this.dao = dao;
//    }
//
//    public AbstractService<D, M, K> addIgnoreField(String... fieldName) {
//        CollectionKit.mergeArrayIntoCollection(fieldName, this.ignoreSet);
//        return this;
//    }
//
//    public AbstractService<D, M, K> resetIgnoreField() {
//        this.ignoreSet.clear();
//        CollectionKit.mergeArrayIntoCollection(DEFAULT_IGNORE_FIELDS, this.ignoreSet);
//        return this;
//    }
//
//    public AbstractService<D, M, K> removeIgnoreField(String... fieldName) {
//        String[] var2 = fieldName;
//        int var3 = fieldName.length;
//
//        for(int var4 = 0; var4 < var3; ++var4) {
//            String name = var2[var4];
//            this.ignoreSet.remove(name);
//        }
//
//        return this;
//    }
//
//    private String[] getIgnoreField() {
//        String[] ignoreArray = new String[0];
//        return (String[])this.ignoreSet.toArray(ignoreArray);
//    }
//
//    public M save(M m) {
//        K id = (Serializable)m.getId();
//        BaseEntity saveModel;
//        if (ObjectKit.isEmpty(id)) {
//            saveModel = m;
//        } else {
//            saveModel = this.dao.findOne(id);
//            if (saveModel != null) {
//                BeanKit.copyProperties(m, saveModel, this.getIgnoreField());
//            } else {
//                saveModel = m;
//            }
//        }
//
//        return (BaseEntity)this.dao.save(saveModel);
//    }
//
//    public <S extends M> List<S> save(List<S> listm) {
//        List<S> result = new ArrayList();
//        if (listm != null && !listm.isEmpty()) {
//            Iterator var3 = listm.iterator();
//
//            while(var3.hasNext()) {
//                S model = (BaseEntity)var3.next();
//                if (StringKit.isEmpty(model.getId())) {
//                    result.add(model);
//                } else {
//                    S saveModel = this.dao.findOne((Serializable)model.getId());
//                    if (saveModel != null) {
//                        BeanKit.copyProperties(model, saveModel, this.getIgnoreField());
//                    } else {
//                        saveModel = model;
//                    }
//
//                    result.add(saveModel);
//                }
//            }
//
//            return this.dao.save(result);
//        } else {
//            return result;
//        }
//    }
//
//    public boolean deleteModel(M m) {
//        boolean isok = false;
//
//        try {
//            this.dao.delete(m);
//            isok = true;
//        } catch (Exception var4) {
//            LOGGER.error("删除对象出错了!", var4);
//        }
//
//        return isok;
//    }
//
//    public boolean deleteModel(List<M> listm) {
//        return this.delete(this.toIdList(listm));
//    }
//
//    public boolean delete(M m) {
//        return this.deleteModel(m);
//    }
//
//    public boolean delete(K key) {
//        boolean isok = false;
//
//        try {
//            this.dao.delete(key);
//            isok = true;
//        } catch (Exception var4) {
//            LOGGER.error("删除对象出错了!", var4);
//        }
//
//        return isok;
//    }
//
//    public boolean delete(List<K> listobj) {
//        boolean isok = false;
//
//        try {
//            List<M> batchModels = new ArrayList();
//            Iterator var4 = listobj.iterator();
//
//            while(var4.hasNext()) {
//                K key = (Serializable)var4.next();
//                M editModel = this.dao.findOne(key);
//                if (editModel != null) {
//                    batchModels.add(editModel);
//                }
//            }
//
//            this.dao.delete(batchModels);
//            isok = true;
//        } catch (Exception var7) {
//            LOGGER.error("删除组对象出错了!", var7);
//        }
//
//        return isok;
//    }
//
//    public boolean logicDelete(K obj) {
//        boolean isok = false;
//
//        try {
//            M editModel = this.dao.findOne(obj);
//            editModel.setDeleted(true);
//            this.dao.save(editModel);
//            isok = true;
//        } catch (Exception var4) {
//            LOGGER.error("逻辑删除对象出错了!", var4);
//        }
//
//        return isok;
//    }
//
//    public <S extends M> boolean logicDelete(List<K> listobj) {
//        boolean isok = false;
//        ArrayList result = new ArrayList();
//
//        try {
//            Iterator var4 = listobj.iterator();
//
//            while(var4.hasNext()) {
//                K key = (Serializable)var4.next();
//                S editModel = this.dao.findOne(key);
//                editModel.setDeleted(true);
//                result.add(editModel);
//            }
//
//            this.dao.save(result);
//            isok = true;
//        } catch (Exception var7) {
//            LOGGER.error("逻辑删除组对象出错了!", var7);
//        }
//
//        return isok;
//    }
//
//    public boolean logicDeleteModel(M m) {
//        return this.logicDelete((Serializable)m.getId());
//    }
//
//    public boolean logicDeleteModel(List<M> listModel) {
//        return this.logicDelete(this.toIdList(listModel));
//    }
//
//    public Page<M> queryForPage(Class<? extends Dto> dtoClass, Map<String, Object> map) {
//        DefaultJpaQuery<M> dq = new DefaultJpaQuery(dtoClass, map);
//        Specification<M> specification = dq.buildSpecification();
//        return this.dao.findAll(specification, dq.buildPageable());
//    }
//
//    public List<M> query(Class<? extends Dto> dtoClass, Map<String, Object> map) {
//        DefaultJpaQuery<M> dq = new DefaultJpaQuery(dtoClass, map);
//        return this.dao.findAll(dq.buildSpecification(), dq.buildSort());
//    }
//
//    public <K, M extends BaseEntity<K>> List<K> toIdList(List<M> models) {
//        List<K> tlist = new ArrayList();
//        if (models == null) {
//            return tlist;
//        } else {
//            Iterator var3 = models.iterator();
//
//            while(var3.hasNext()) {
//                M model = (BaseEntity)var3.next();
//                if (model != null) {
//                    tlist.add(model.getId());
//                }
//            }
//
//            return tlist;
//        }
//    }
//
//    public <K, M extends BaseEntity<K>> List<Map<String, Object>> toMapList(List<M> models, Map<String, ConvertHandler> handlerMap, String... ignorefields) {
//        List<Map<String, Object>> tlist = new ArrayList();
//        Iterator var5 = models.iterator();
//
//        while(var5.hasNext()) {
//            M model = (BaseEntity)var5.next();
//            Map<String, Object> tmap = AbstractCommonServcie.getModelMap(model, ignorefields);
//            Iterator var8 = handlerMap.keySet().iterator();
//
//            while(var8.hasNext()) {
//                String key = (String)var8.next();
//                ConvertHandler convertHandler = (ConvertHandler)handlerMap.get(key);
//                if (convertHandler != null) {
//                    tmap.putAll(convertHandler.handle(tmap, key));
//                }
//            }
//
//            tlist.add(tmap);
//        }
//
//        return tlist;
//    }
//
//    public <K, M extends BaseEntity<K>> Map<String, Object> toMap(M model, Map<String, ConvertHandler> handlerMap, String... ignorefields) {
//        Map<String, Object> tmap = AbstractCommonServcie.getModelMap(model, ignorefields);
//        Iterator var5 = handlerMap.keySet().iterator();
//
//        while(var5.hasNext()) {
//            String key = (String)var5.next();
//            ConvertHandler convertHandler = (ConvertHandler)handlerMap.get(key);
//            if (convertHandler != null) {
//                tmap.putAll(convertHandler.handle(tmap, key));
//            }
//        }
//
//        return tmap;
//    }
//
//    public <K, M extends BaseEntity<K>> List<Map<String, Object>> toMapList(List<M> models, Class<? extends ConvertDto> dto, String... ignorefields) {
//        List<Map<String, Object>> tlist = new ArrayList();
//        Iterator var5 = models.iterator();
//
//        while(var5.hasNext()) {
//            M model = (BaseEntity)var5.next();
//            tlist.add(this.toMap(model, dto, ignorefields));
//        }
//
//        return tlist;
//    }
//
//    public <K, M extends BaseEntity<K>> Map<String, Object> toMap(M model, Class<? extends ConvertDto> dto, String... ignorefields) {
//        ConvertBean convertbean = (ConvertBean)dto.getAnnotation(ConvertBean.class);
//        Set<String> igSet = new HashSet();
//        CollectionKit.mergeArrayIntoCollection(convertbean.igFields(), igSet);
//        CollectionKit.mergeArrayIntoCollection(ignorefields, igSet);
//        Assert.notNull(convertbean, "该转换bean不是 @ConvertBean");
//        Map<String, Object> tmap = new HashMap();
//        Map<String, Object> modelMap = AbstractCommonServcie.getModelMap(model, (String[])igSet.toArray(new String[igSet.size()]));
//        tmap.putAll(AbstractCommonServcie.getScreenItemMap(convertbean.all(), convertbean.value(), modelMap));
//        Iterator var8 = Dto.getAllFiled(dto).iterator();
//
//        while(var8.hasNext()) {
//            Field field = (Field)var8.next();
//            ConvertConfig convertConfig = (ConvertConfig)field.getAnnotation(ConvertConfig.class);
//            if (convertConfig != null) {
//                String valuekey = field.getName();
//                String key = convertConfig.value();
//                if (StringKit.isEmpty(key)) {
//                    key = valuekey;
//                }
//
//                if (!CollectionKit.inArray(key, ignorefields)) {
//                    String el = convertConfig.spel();
//                    boolean overly = convertConfig.overlying();
//                    Class<? extends ConvertHandler> convertClass = convertConfig.handler();
//                    Class<? extends ConvertDto> convertDtoClass = convertConfig.subConfig();
//                    if (!StringKit.isEmpty(el)) {
//                        try {
//                            Map<String, Object> variableMap = new HashMap();
//                            Map<String, Method> methodMap = AbstractCommonServcie.getMethods(convertConfig.methods());
//                            variableMap.put("m", model);
//                            variableMap.put("mthod", methodMap);
//                            tmap.put(valuekey, SpringElKit.getObjectWithSpel(el, methodMap, variableMap, convertConfig.returnType()));
//                        } catch (NoSuchMethodException var19) {
//                            LOGGER.error("转换el表达式，获取方法失败，NoSuchMethod ", var19);
//                        }
//                    } else if (ConvertHandler.class != convertClass) {
//                        ConvertHandler convertHandler = (ConvertHandler)BeanKit.instantiate(convertClass);
//                        tmap.putAll(convertHandler.handle(modelMap, key));
//                    } else if (!ConvertConfig.class.getName().equals(convertDtoClass.getName())) {
//                        Object value = modelMap.get(key);
//                        if (ClassKit.isAssignableValue(Collection.class, value)) {
//                            List<M> list = (List)value;
//                            tmap.put(valuekey, this.toMapList(list, convertDtoClass, ignorefields));
//                        } else if (overly) {
//                            tmap.putAll(this.toMap((BaseEntity)value, convertDtoClass, ignorefields));
//                        } else {
//                            tmap.put(valuekey, this.toMap((BaseEntity)value, convertDtoClass, ignorefields));
//                        }
//                    }
//                }
//            }
//        }
//
//        return tmap;
//    }
//
//    public D getDao() {
//        return this.dao;
//    }
//}
